package com.smart.community.region.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.region.entity.Shop;
import com.smart.community.region.vo.ShopVO;

import java.util.List;

/**
 * 店铺信息Service接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-09-30
 */
public interface IShopService extends IService<Shop> {
    
    /**
     * 分页查询店铺列表
     * 遵循《Java后端SpringBoot代码开发规范_重构版.md》Service层规范
     * 遵循《系统状态枚举权威标准声明.md》状态枚举规范
     * 
     * @param page 分页参数
     * @param communityId 社区ID
     * @param shopType 店铺类型
     * @param shopName 店铺名称
     * @param shopCode 店铺编码
     * @param buildingId 楼栋ID
     * @param unitId 单元ID
     * @param roomNumber 房间号
     * @param contactPerson 联系人
     * @param contactPhone 联系电话
     * @param status 状态
     * @param minArea 最小面积
     * @param maxArea 最大面积
     * @param minRentPrice 最小租金
     * @param maxRentPrice 最大租金
     * @return 分页结果
     * @throws Exception 异常
     */
    IPage<ShopVO> getShopPage(Page<ShopVO> page, Long communityId, Integer shopType, String shopName, String shopCode, Long buildingId, Long unitId, String roomNumber, String contactPerson, String contactPhone, Integer status, java.math.BigDecimal minArea, java.math.BigDecimal maxArea, java.math.BigDecimal minRentPrice, java.math.BigDecimal maxRentPrice) throws Exception;
    
    /**
     * 根据社区ID查询店铺列表
     * 
     * @param communityId 社区ID
     * @return 店铺列表
     * @throws Exception 异常
     */
    List<Shop> getShopListByCommunityId(Long communityId) throws Exception;
    
    /**
     * 根据店铺类型查询店铺列表
     * 
     * @param shopType 店铺类型
     * @return 店铺列表
     * @throws Exception 异常
     */
    List<Shop> getShopListByType(Integer shopType) throws Exception;
    
    /**
     * 根据店铺编码查询店铺信息
     * 
     * @param shopCode 店铺编码
     * @return 店铺信息
     * @throws Exception 异常
     */
    Shop getShopByCode(String shopCode) throws Exception;
    
    /**
     * 根据楼栋ID查询店铺列表
     * 
     * @param buildingId 楼栋ID
     * @return 店铺列表
     * @throws Exception 异常
     */
    List<Shop> getShopListByBuildingId(Long buildingId) throws Exception;
    
    /**
     * 根据单元ID查询店铺列表
     * 
     * @param unitId 单元ID
     * @return 店铺列表
     * @throws Exception 异常
     */
    List<Shop> getShopListByUnitId(Long unitId) throws Exception;
    
    /**
     * 创建店铺
     * 
     * @param shop 店铺信息
     * @return 店铺ID
     * @throws Exception 异常
     */
    Long createShop(Shop shop) throws Exception;
    
    /**
     * 更新店铺信息
     * 
     * @param shop 店铺信息
     * @return 是否成功
     * @throws Exception 异常
     */
    Boolean updateShop(Shop shop) throws Exception;
    
    /**
     * 删除店铺
     * 
     * @param id 店铺ID
     * @return 是否成功
     * @throws Exception 异常
     */
    Boolean deleteShop(Long id) throws Exception;
    
    /**
     * 批量删除店铺
     * 
     * @param ids 店铺ID列表
     * @return 是否成功
     * @throws Exception 异常
     */
    Boolean batchDeleteShop(List<Long> ids) throws Exception;
    
    /**
     * 统计店铺数量
     * 
     * @param communityId 社区ID
     * @param shopType 店铺类型
     * @return 店铺数量
     * @throws Exception 异常
     */
    Integer countShops(Long communityId, Integer shopType) throws Exception;
    
    /**
     * 检查店铺编码是否存在
     * 
     * @param shopCode 店铺编码
     * @param excludeId 排除的店铺ID
     * @return 是否存在
     * @throws Exception 异常
     */
    Boolean existsByShopCode(String shopCode, Long excludeId) throws Exception;
    
    /**
     * 启用店铺
     * 
     * @param id 店铺ID
     * @return 是否成功
     * @throws Exception 异常
     */
    Boolean enableShop(Long id) throws Exception;
    
    /**
     * 禁用店铺
     * 
     * @param id 店铺ID
     * @return 是否成功
     * @throws Exception 异常
     */
    Boolean disableShop(Long id) throws Exception;
}
